package main

import "fmt"

// copy

func main() {
	a1 := []int{1, 3, 5, 7, 11}
	//a2 := a1 // 赋值
	//var a3 = make([]int, 3, 3)
	//copy(a3, a1) // copy
	//fmt.Println(a1, a2, a3)
	//a1[0] = 100
	//fmt.Println(a1, a2, a3)

	// 将a1中的索引为1的3这个元素删掉
	a1 = append(a1[:1], a1[2:]...)
	fmt.Println(a1)
	fmt.Println(cap(a1))

	x1 := [...]int{1, 3, 5} // 数组
	s1 := x1[:]             // 切片
	fmt.Println(s1, len(s1), cap(s1))
	// 1. 切片不保存具体的值
	// 2. 切片对应一个底层数组
	// 3. 底层数组都是占用一块连续的内存
	s1 = append(s1[:1], s1[2:]...) // 所有对切片的操作都是直接修改了底层数组！
	//s1[:1] 1
	//s1[2:]... 5
	//原来底层数组x1 是[1,3,5],切片操作把底层数组中的3元素给删了
	//所以s1 = [1,5],这是切片的值，但是底层数组x1 不是[1,3,5]了
	//实际上修改了底层数组x1  [1,3,5] 变成[1,5,5]
	//底层数组x1中的元素3被删除了，所以空了一位，这时135中的5提前了一位，变成15，同时数组的长度是不可变的，所以变成了15?，但是数组第三位没有变化，还是5
	//所以最后的数组的结果是[1,5,5]
	fmt.Println(s1, len(s1), cap(s1))
	fmt.Println(x1)

	s1[2] = 100
	fmt.Println(x1) // [100 5 5 ]
}
